
public class Test {
    public static void main() {
        // 浮点数运算和整数运算相比，只能进行加减乘除这些数值计算，不能做位运算和移位运算
        double x = 1.0 / 10;
        double y = 1 - 9.0 / 10;
        // 观察x和y是否相等:
        System.out.println(x);
        System.out.println(y);

        // 由于浮点数存在运算误差，所以比较两个浮点数是否相等常常会出现错误的结果。
        // 正确的比较方法是判断两个浮点数之差的绝对值是否小于一个很小的数
        double r = Math.abs(x - y);
        // 再判断绝对值是否足够小:
        if (r < 0.00001) {
            // 可以认为相等
            System.out.println("x and y are equal");
        } else {
            // 不相等
            System.out.println("x and y are not equal");
        }

        // 类型提升
        // 如果参与运算的两个数其中一个是整型，那么整型可以自动提升到浮点型
        int n = 5;
        double m = 1.0;
        var sum = n + m; // sum自动提升为double类型
        System.out.println("sum is " + sum);

        // NaN表示Not a Number
        // Infinity表示无穷大
        // -Infinity表示负无穷大
        double d1 = 0.0 / 0; // NaN
        double d2 = 1.0 / 0; // Infinity
        double d3 = -1.0 / 0; // -Infinity
        System.out.println("d1 is " + d1);
        System.out.println("d2 is " + d2);
        System.out.println("d3 is " + d3);

        // 如果要进行四舍五入，可以对浮点数加上0.5再强制转型
        double d = 2.6;
        int nn = (int) (d + 0.5);
        System.out.println("nn is " + nn);
    }

}